package controller;

import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import service.UserService;
import service.impl.UserServiceImpl;

import java.io.IOException;

/**
 * 注册界面控制类
 *
 * @author Mr.Alpaca
 * @version 1.0.0
 */
public class RegisterController {
    public Label passwordLabel;
    public TextField passwordTextField;
    public Label idLabel;
    public TextField idTextField;
    public Label nameLabel;
    public TextField nameTextField;
    public Button registerBtn;
    /**
     * 服务类
     */
    private final UserService service = UserServiceImpl.getService();

    /**
     * 注册按钮事件
     *
     * @param actionEvent 事件
     */
    public void onRegister(ActionEvent actionEvent) {
        long id = Long.parseLong(idTextField.getText());
        String password = passwordTextField.getText();
        String name = nameTextField.getText();
        // 调用服务进行注册并根据结果执行响应动作
        boolean reason = service.register(id, password, name);
        if (reason) {
            success();
        } else {
            fail();
        }
    }

    /**
     * 注册成功动作:
     * 1.提示信息
     * 2.跳转到登录界面
     * 3.关闭登录界面
     */
    private void success() {
        // 提示消息
        alertMessage("注册成功");
        // 进入登录窗口
        try {
            Stage stage = new Stage();
            Parent root = FXMLLoader.load(getClass().getResource("/fxml/login.fxml"));
            stage.setTitle("登录界面");
            stage.setScene(new Scene(root));
            stage.setResizable(false);
            stage.show();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        // 关闭当前界面
        closeCurrentStage();
    }

    /**
     * 登陆失败动作:
     * 1.提示信息
     * 2.清空已填入信息
     */
    private void fail() {
        // 提示消息
        alertMessage("注册失败");
        // 清空已填入信息
        idTextField.setText("");
        passwordTextField.setText("");
    }

    /**
     * 弹出提示框提示指定消息
     *
     * @param message 提示信息
     */
    private void alertMessage(String message) {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION, message, ButtonType.FINISH, ButtonType.CLOSE);
        alert.showAndWait();
    }

    /**
     * 关闭当前界面
     */
    private void closeCurrentStage() {
        ((Stage) idTextField.getScene().getWindow()).close();
    }
}
